Early relational database management systems were tailored to handle small data objects such as names, addresses, and account numbers, for example. Recently, relational systems have been adapted to accommodate large data objects. Large data objects may be generally categorized as binary large objects or character large objects and represent images, video segments, audio segments, and large documents, for example.
Some transaction-based database applications process both large and small data objects. The approach by which large data objects are transferred between the relational database management system and a requesting program may negatively impact transaction processing performance, program complexity and development time. Furthermore, in processing a large data object the object may be copied to the requester memory, which further complicates processing. For example, in processing SQL commands, data selected from a database are stored in variables in memory allocated to the requester program, and data to be inserted in the database are found in the variables in memory of the requester program. To insert a large data object in a database, the large data object is copied to the memory of the requesting program; the large data object may occupy many gigabytes of memory. This requires requester program logic to allocate the memory, and for an insert operation to read the object from its original location into requester program memory, and for a select operation to write the object data from requester program memory to the desired destination.
To allocate the amount of memory necessary to contain a large data object, the program may need to be linked in a manner different from that used to link programs that manipulate only small data objects. Similarly, the data transmission protocols such as TCP/IP or ATM are optimized for small objects, whereas file transmission protocols, such as the recognized file transport protocol (FTP), are optimized for large objects (files). A large data object is too large to be efficiently transmitted in the same manner as smaller data objects. Thus, different optimizations may be needed for large object data transfers versus the optimizations used for small object data transfers. In order to achieve acceptable performance, it is therefore necessary for the requester program to include special logic to transmit large objects. To write such logic requires knowledge of the underlying transmission protocol and is time consuming to test.
The extra program complexity along with the extra memory needed by a requester program to select and insert large data objects from and in a database will increase application development time and may hurt application performance because the application may not know how large the large data objects are going to be and therefore, cannot properly optimize memory usage or transmission protocol choice based on the size of the data transfer. A method and system that addresses these and other related issues is therefore desirable.